package top.dingwen.io.treasure.api.base.response;

import lombok.Getter;
import lombok.Setter;
import top.dingwen.io.treasure.api.base.constant.ApiConstant;

import java.util.List;

/**
 * PageResponse : 统一分页结果对象
 *
 * @author dingwen
 * @since 2024/10/22 15:54
 */
@SuppressWarnings(ApiConstant.ALL)
@Getter
@Setter
public class PageResponse<T> extends MultiResponse<T> {
    /**
     * 页面大小
     */
    private Integer pageSize;


    /**
     * 当前页
     */
    private Integer pageNum;


    /**
     * 总记录条数
     */
    private Integer totalNum;

    /**
     * 构建成功的响应
     *
     * @param datas 数据集
     * @param totalNum 总记录条数
     * @param pageSize 页面大小
     * @param pageNum  页码
     * @return {@link PageResponse } 分页响应结果
     */
    public static <T> PageResponse<T> success(List<T> datas, Integer totalNum, Integer pageSize, Integer pageNum){
        PageResponse<T> pageResponse = new PageResponse<>();
        pageResponse.setSuccess(Boolean.TRUE);
        pageResponse.setDatas(datas);
        pageResponse.setTotalNum(totalNum);
        pageResponse.setPageSize(pageSize);
        pageResponse.setPageNum(pageNum);
        return pageResponse;
    }


    /**
     * 构建单一的失败的响应
     *
     * @param code  业务编码
     * @param message 业务消息
     * @return {@link PageResponse } 结果集
     */
    public static <T> PageResponse<T> failure(String code, String message){
        PageResponse<T> pageResponse = new PageResponse<>();
        pageResponse.setSuccess(Boolean.FALSE);
        pageResponse.setCode(code);
        pageResponse.setMessage(message);
        return pageResponse;
    }
}
